perm filename IN[MUS,LCS] blob
sn#308327 filedate 1977-10-05 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00006 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 COMMENT: ******INITIALIZATION FILE FOR MUSIC.DMP******** 3/77
C00005 00003 FUNCTION SEG(ARRAY FUNC)
C00007 00004 FUNCTION SYNTH(ARRAY FUNC)
C00009 00005 <comment: type 'SETMAG nchns, srate'
C00012 00006 <FOUR INSTRUMENTS FOR ELEMENTRY COMPUTER MUSIC (+SIMP)
C00015 ENDMK
C⊗;
COMMENT: ******INITIALIZATION FILE FOR MUSIC.DMP******** 3/77
TO CREATE MUSIC.DMP RUN COMMAND FILE, 'LCSMUS.CMD',
THEN READ IN THIS FILE BEFORE SAVING ON THE SYSTEM.
THE FOLLOWING FUNCTIONS ARE SET UP HEREIN:
SEE(ARRAY FUNC)
SEG(ARRAY FUNC)
SYNTH(ARRAY FUNC)
POWER( N, X ) [GIVES POWER OF N TO THE XTH] ;
VARIABLE MAG,C,CF,CS,D,DF,DS,E,EF,ES,F,FF,FS,G,GF,GS,A,AF,AS,B,BF,BS;
C←261.62; CS←DF←277.18; D←293.66; DS←EF←311.13; E←FF←329.63;
F←ES←349.23; FS←GF←369.99; G←391.99; GS←AF←415.31;
A←440; AS←BF←466.16; B←493.89; CF←B/2; BS←C*2;
EXTERNAL FUNCTION
SIN(A), EXP(A), ALOG(A), SQRT(A), RDNUM(X),
DPYSET(INTEGER POG,ARRAY DPYBUF,INTEGER SIZE),
ALINE(INTEGER X1,INTEGER Y1,INTEGER X2,INTEGER Y2),
DPYOUT(INTEGER POG),
AIVECT(INTEGER X,INTEGER Y), SIND(X),
TYPLOC(INTEGER X,INTEGER Y), RVECT(INTEGER X,INTEGER Y);
FUNCTION SEE(ARRAY FUNC);
BEGIN
ARRAY DPY(225); VARIABLE IY,I,IY2;
DPYSET(2,DPY,225); TYPLOC(-100,-412);
COMMENT THIS VERSION MUST BE LOADED WITH %LTVRLIB (FOR 'DDCLR')
TYPLOC MOVES ONLY WHEN USING DATADISC.;
ALINE(-264,200,256,200); ALINE(-266,328,-246,328);
ALINE(-266,456,-246,456); ALINE(-266,72,-246,72);
ALINE(-266,-56,-246,-56); ALINE(-256,-56,-256,456);
ALINE(0,190,0,210); ALINE(-128,190,-128,210);
ALINE(128,190,128,210);
IY←INT(FUNC(0)*256.0+200.0); AIVECT(-256,IY);
COMMENT: DISPLAY ONLY EVERY THIRD SEGMENT ;
FOR I←1 STEP 3 UNTIL 511 DO
BEGIN
IY2←INT(FUNC(I)*256.0+200.0);
RVECT(3,IY2-IY); IY←IY2;
END; DPYOUT(2);
END;
FUNCTION SEEIT(ARRAY FUNC); BEGIN
VARIABLE K; PRINT "SEG ARRAY ";
SEE(FUNC);
END;
FUNCTION SEG(ARRAY FUNC);
BEGIN
VARIABLE X512,K,A1,A2,ST,STPP,STPS,IS,IT,DIF,RK;
A1←0; ST←0; STPP←0; X512←0;
WHILE STPP ≤ 1 DO
BEGIN
RDNUM(A2);
IF A2 =512 THEN X512←A2;
IF A2 =512 THEN RDNUM(A2); RDNUM(STPP);
COMMENT: TYPE 512 AT FIRST TO USE 512 STEPS INSTEAD OF 100 STEPS.;
IF STPP ≤ 1 THEN A1←A2;
END;
WHILE STPP ≠ 999 DO
BEGIN
IS← INT(STPP*5.120+.0001);
IF X512 ≠ 0 THEN IS←INT(STPP+.0001);
IF IS > 512 THEN
BEGIN
FOR K←0 STEP 1 UNTIL 511 DO
COMMENT: READ 512 NUMS FROM A FUNC FILE.;
BEGIN
RDNUM(RK); FUNC(K)← RK;
END;
SEEIT(FUNC); RETURN;
END;
STPP ← IS-1; STPS ← STPP-ST;
IS ← INT(STPS); DIF←A2-A1;
IT←INT(ST); ST ← STPP;
FOR K←0 STEP 1 UNTIL IS DO
BEGIN
RK ← K;
FUNC(K+IT) ← A1+DIF*RK/STPS;
END;
IF STPP = 511 THEN SEEIT(FUNC);
IF STPP ≥ 511 THEN RETURN;
A1←A2; ST←STPP;
RDNUM(A2); RDNUM(STPP);
END;
END;
FUNCTION SYNTH(ARRAY FUNC);
BEGIN
VARIABLE K,XX,H,FAC,CON,AMP,X,XK,J;
FOR J ← 0 STEP 1 UNTIL 511 DO BEGIN
FUNC(J) ← 0; END;
COMMENT: CLEAR THE ARRAY;
RDNUM(XX); IF XX = 99 THEN XX ← -XX;
H ← XX; IF XX < 0 THEN RDNUM(H);
WHILE H ≠ 999 DO
BEGIN
RDNUM(AMP);
X ←0; CON ←0;
IF XX < 0 THEN
BEGIN
RDNUM(X); RDNUM(CON);
COMMENT X ← X * 1.42222222 +1 ; COMMENT 1.422 = 512/360 ;
X ← X * 512/360 +1;
END;
FOR J ← 0 STEP 1 UNTIL 511 DO
BEGIN
XK ← SIND(X*360/512) * AMP + CON;
COMMENT: .703125 = 360/512 ; XK ← SIND(X*.703125) * AMP + CON ;
IF CON ≥ 100 THEN FUNC(J) ← (XK-100)*FUNC(J) ;
IF CON < 100 THEN FUNC(J) ← FUNC(J) + XK ;
X ← X+H; IF X > 512 THEN X ← X-512;
END;
RDNUM(H);
END;
X ← FUNC(0); COMMENT: NEXT FOR NORMALIZATION;
FOR J ← 1 STEP 1 UNTIL 511 DO BEGIN H ← ABS(FUNC(J));
IF X < H THEN X ← H; END;
FOR J ← 0 STEP 1 UNTIL 511 DO BEGIN FUNC(J) ← FUNC(J) / X ; END;
PRINT "SYNTH ARRAY "; SEE(FUNC);
END;
FUNCTION POWER(X,N)=EXP(N*ALOG(X)); comment nth power of x;
<comment: type 'SETMAG; nchns, srate' ;
FUNCTION MAGERR(X);
BEGIN PRINT "IMPROPER INPUT. "; X←0;
print "Type number of channels and sample rate: ";
END;
FUNCTION ADJRATE; BEGIN
IF SRATE < 6400 THEN BEGIN
IF SRATE = 1 THEN SRATE ← 12800; IF SRATE = 2 THEN SRATE ← 25600;
IF SRATE = 3 THEN SRATE ← 51200; IF SRATE = 4 THEN SRATE ← 102400;
IF SRATE = 5 THEN SRATE ← 204800; IF SRATE <10 THEN SRATE ← 6400;
IF SRATE <20 THEN SRATE ← 12800; IF SRATE <50 THEN SRATE ← 25600;
IF SRATE <100 THEN SRATE ← 51200; IF SRATE <200 THEN SRATE ← 102400;
IF SRATE <400 THEN SRATE ← 204800;
COMMENT: YOU MAY TYPE 1 OR 12 FOR 12800, ETC.;
END; END;
Function SETMAG;
begin
VARIABLE X; X←0;
WHILE X = 0 DO
BEGIN X←1; rdnum(nchns); rdnum(srate);
IF NCHNS > 4 THEN MAGERR(X);
IF NCHNS = 3 THEN MAGERR(X);
IF NCHNS < 1 THEN MAGERR(X);
ADJRATE;
COMMENT: ONLY 6400, 12800, ETC. ARE ACCEPTED;
IF INT(SRATE/6400+.1) ≠ SRATE/6400 THEN MAGERR(X);
END;
SPEED←INT(ALOG(SRATE/6400)/ALOG(2)+.1); mag←512/srate;
PRINT "NCHNS=",NCHNS," SRATE=",SRATE," SPEED=",SPEED;
end;
<SRATE←12800;MAG←512/SRATE;NCHNS←1;
SETMAG; 1 12.8;
Function SETCLOCK;
begin
print "Number of channels: ";
rdnum(nchns);
print "Clock rate: ";
rdnum(srate);
if srate<100 then srate←srate*1000;
mag←512/srate;
end;
<FOUR INSTRUMENTS FOR ELEMENTRY COMPUTER MUSIC (+SIMP)
INSTRUMENT SIMP;
OUTA←OUTA+ZOSCIL(P4,MAG*P3,P5);
END;
INSTRUMENT TOOT;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P6);<P6 IS TONE COLOR FOR 'TOOT'
OUTA←OUTA+U2;END;
INSTRUMENT CLAR;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P7);< P7 IS TONE COLOR FOR 'CLAR'
OUTA←OUTA+U2;END;
INSTRUMENT BRIT;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P8);< P8 IS TONE COLOR FOR 'BRIT'
OUTA←OUTA+U2;END;
INSTRUMENT BUZZ;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P9);< P9 IS TONE COLOR FOR 'BUZZ'
OUTA←OUTA+U2;END;
ARRAY F1,F2,F3,F4,F5,F6(512);
SEG(F1);.9 6,1 11 .9 82 .7 90 0 100; < MEZZO LEGATO
SEG(F2);1 3,1 11,.4 31,.1 51,0 100; < STACCATO
SYNTH(F3);1 1 999; < TOOT - SINE WAVE (USED FOR SIMP ALSO)
SYNTH(F4);1,.5 3,.3 5,.2 7,.1 999; < CLAR
SYNTH(F5);1,.3 2,.4 3,.2 8,.2 12 .1 999; < BRIT
SEG(F6);-1,1 1,7 -1,14 -1,100; < BUZZ
<<<<<<<<P3←A; P4←2000; P5←F1; COMMENT: SIMP parameter default. ;
<<<<<**OLD SPECS.**** OUTSPEC←"TEST.SND/BYTESIZE=12/SOUND";
OUTSPEC←"TEST.SND/BYTESIZE=12/HEADER/PLAY";
<<<OUTSPEC←"TEST.SND/BYTESIZE=12/PLAY";
NO_MSG←1; < THESE 2 LINES SET UP "EZPLAY" FEATURES.
PLAY;TOOT 0 .12 C 1000 F1 F3 F4 F5 F6 0;
CLAR .12;BRIT .24;BUZZ .36;
PLAY;SIMP 0 .5 A 1000 F3;FINISH;
PRINT "
Type <RETURN>, <ALT>FREEZE before saving.";